package com.tools.payhelper.utils.permission;

import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.tools.payhelper.R;


/**
 * @author zhujuncheng
 * @version 1.0.0.0
 * @功能 TODO  对话框基类
 */
public class BaseDialog {
    /**
     * 上下文
     */
    private Context context;

    /**
     * 按钮
     */
    private RelativeLayout mLeftBtnRl;
    private TextView mLeftBtn;

    private RelativeLayout mRightBtnRl;
    private TextView mRightBtn;

    private TextView mMiddleBtn;

    private ImageView mLine1;
    private ImageView mLine2;
    private ImageView mLineTop;
    /**
     * 提示对话框
     */
    private Dialog dialog;

    /**
     * 提示内容
     */
    private TextView alertTv;
    /**
     * 标题图片
     */
    private ImageView titleIv;
    /**
     * 标题关闭按钮
     */
    private ImageView titleCloseIv;
    /**
     * 视图
     */
    private View view;
    /**
     * 自定义dialog主视图
     */
    private View contentView;
    /**
     * 对话框内容布局
     */
    private RelativeLayout contentRl;
    /**
     * 自定义点击事件接口
     */
    private OnBtnClickListener clickListener;

    /**
     * 对话框标题文本
     */
    private String mDefaultDialogTitle;

    /**
     * 左边按钮的默认文本
     */
    private String mDefaultLeftBtnText;

    /**
     * 右边按钮的默认文本
     */
    private String mDefaultRightBtnText;

    /**
     * 中间按钮的默认文本
     */
    private String mDefaultMiddleBtnText;
    /**
     * 中间按钮的默认文本
     */
    private boolean isTitleLineExists = false;

    public BaseDialog(Context context) {
        this.context = context;
        initView();
        setListener();

        Resources resources = context.getResources();

        mDefaultDialogTitle = resources.getString(R.string.common_dialog_title);
        mDefaultLeftBtnText = resources.getString(R.string.common_dialog_btn_text_yes);
        mDefaultRightBtnText = resources.getString(R.string.common_dialog_btn_text_no);
        mDefaultRightBtnText = resources.getString(R.string.common_dialog_btn_text_middle);
    }

    /**
     * 返回自定义dialog主视图
     *
     * @return
     */
    public View getContentView() {
        return contentView;
    }

    /**
     * 初始化控件 <功能详细描述>
     *
     * @see [类、类#方法、类#成员]
     */
    private void initView() {
        view = LayoutInflater.from(context).inflate(R.layout.dialog_base, null);
        dialog = new Dialog(context, R.style.base_dialog);
        dialog.setCanceledOnTouchOutside(false);
        dialog.setCancelable(false);
        dialog.setContentView(view);

        contentRl = (RelativeLayout) view.findViewById(R.id.content_rl);
        titleIv = (ImageView) view.findViewById(R.id.title_iv);
        titleCloseIv=(ImageView) view.findViewById(R.id.close);
        alertTv = (TextView) view.findViewById(R.id.content);
        mLeftBtn = (TextView) view.findViewById(R.id.leftBtn);
        mLeftBtnRl = (RelativeLayout) view.findViewById(R.id.left_btn_rl);
        mLine1 = (ImageView) view.findViewById(R.id.line1);
        mLine2 = (ImageView) view.findViewById(R.id.line2);
        mRightBtn = (TextView) view.findViewById(R.id.rigntBtn);
        mRightBtnRl = (RelativeLayout) view.findViewById(R.id.right_btn_rl);
        mMiddleBtn = (TextView) view.findViewById(R.id.middleBtn);

        titleCloseIv.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                close();
            }
        });
    }
//设置弹出框上面图片位置
    public void setTitleRes(int resId){
        titleIv.setImageResource(resId);
    }

    public void setTitleIv(Bitmap bmp){
        titleIv.setImageBitmap(bmp);
    }

    public void setTitleIv(Drawable drawable){
        titleIv.setImageDrawable(drawable);
    }
    //设置弹出框关闭按钮是否显示
    public void setTitleCloseVisible(boolean flag){
        if(flag){
            titleCloseIv.setVisibility(View.VISIBLE);
        }else{
            titleCloseIv.setVisibility(View.GONE);
        }
    }
    //修改对话框中文字的是否居中
    public void setContentTextViewGravity(int gravity){
        alertTv.setGravity(gravity);
    }
    /**
     * 设置点击事件 <功能详细描述>
     *
     * @see [类、类#方法、类#成员]
     */
    private void setListener() {
        mLeftBtn.setOnClickListener(mClickLintener);
        mRightBtn.setOnClickListener(mClickLintener);

        dialog.setOnCancelListener(new OnCancelListener() {
            public void onCancel(DialogInterface dialog) {
                clickListener.onCancel(dialog);
            }
        });
    }

    /**
     * 初始化对话框数据 <功能详细描述>
     *
     * @param titleSourcesId     对话框标题
     * @param contentSourcesId   对话框提示内容
     * @param leftBtnSourcesId   对话框左按钮显示内容
     * @param rightBtnSourcesId  对话框右按钮显示内容
     * @param middleBtnSourcesId 对话框中间按钮显示内容
     * @param isTitleVisble      是否有标题
     * @see [类、类#方法、类#成员]
     */
    public void setDefaultText(int titleSourcesId, int contentSourcesId, int leftBtnSourcesId, int rightBtnSourcesId, int middleBtnSourcesId, boolean isTitleVisble) {
        alertTv.setText(context.getResources().getString(contentSourcesId));
        mLeftBtn.setText(context.getResources().getString(leftBtnSourcesId));
        mRightBtn.setText(context.getResources().getString(rightBtnSourcesId));
        mMiddleBtn.setText(context.getResources().getString(middleBtnSourcesId));
    }

    public void setDefaultText(int titleSourcesId, String contentStr, String leftBtnStr, String rightBtnSourcesId, int middleBtnSourcesId, boolean isTitleVisble) {
        alertTv.setText(contentStr);
        mLeftBtn.setText(leftBtnStr);
        mRightBtn.setText(rightBtnSourcesId);
        mMiddleBtn.setText(context.getResources().getString(middleBtnSourcesId));
    }

    /**
     * @param @param             titleSourcesId
     * @param @param             contentSourcesId
     * @param @param             leftBtnSourcesId
     * @param @param             rightBtnSourcesId
     * @param middleBtnSourcesId 对话框中间按钮显示内容
     * @param @param             contentLayoutId    自定义中间布局资源ID
     * @param isTitleVisble      是否有标题
     * @return void    返回类型
     * @throws
     * @Title: setDefaultText
     * @Description: 初始化对话框数据
     */
    public void setDefaultText(int titleSourcesId, int contentSourcesId, int leftBtnSourcesId, int rightBtnSourcesId, int middleBtnSourcesId, int contentLayoutId, boolean isTitleVisble) {
        alertTv.setVisibility(View.GONE);
        contentView = LayoutInflater.from(context).inflate(contentLayoutId, null);
        RelativeLayout top = (RelativeLayout) view.findViewById(R.id.content_rl);
        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        top.addView(contentView, layoutParams);
        mLeftBtn.setText(context.getResources().getString(leftBtnSourcesId));
        mRightBtn.setText(context.getResources().getString(rightBtnSourcesId));
        mMiddleBtn.setText(context.getResources().getString(middleBtnSourcesId));
    }

    /**
     * 初始化对话框数据 <功能详细描述>
     *
     * @param titleSourcesId     对话框标题
     * @param content            对话框提示内容
     * @param leftBtnSourcesId   对话框左按钮显示内容
     * @param rightBtnSourcesId  对话框右按钮显示内容
     * @param middleBtnSourcesId 对话框中间按钮显示内容
     * @param isTitleVisble      是否有标题
     * @see [类、类#方法、类#成员]
     */
    public void setDefaultText(int titleSourcesId, String content, int leftBtnSourcesId, int rightBtnSourcesId, int middleBtnSourcesId, boolean isTitleVisble) {
        alertTv.setText(content);
        mLeftBtn.setText(context.getResources().getString(leftBtnSourcesId));
        mRightBtn.setText(context.getResources().getString(rightBtnSourcesId));
        mMiddleBtn.setText(context.getResources().getString(middleBtnSourcesId));
    }

    /**
     * 初始化对话框数据 <功能详细描述>
     *
     * @param titleStr           对话框标题
     * @param content            对话框提示内容
     * @param leftBtnSourcesId   对话框左按钮显示内容
     * @param rightBtnSourcesId  对话框右按钮显示内容
     * @param middleBtnSourcesId 对话框中间按钮显示内容
     * @param isTitleVisble      是否有标题
     * @see [类、类#方法、类#成员]
     */
    public void setDefaultText(String titleStr, String content, int leftBtnSourcesId, int rightBtnSourcesId, int middleBtnSourcesId, boolean isTitleVisble) {
        alertTv.setText(content);
        mLeftBtn.setText(context.getResources().getString(leftBtnSourcesId));
        mRightBtn.setText(context.getResources().getString(rightBtnSourcesId));
        mMiddleBtn.setText(context.getResources().getString(middleBtnSourcesId));
    }

    /**
     * 设置只有一个按钮,此时隐藏左侧按钮和分割线,并更换右侧按钮的整体点击背景,该按钮的点击事件通过右侧按钮的click方法实现
     */
    public void setOnlyOneButton() {
        mLeftBtn.setVisibility(View.GONE);
        mLeftBtnRl.setVisibility(View.GONE);
        mLine1.setVisibility(View.GONE);
        mLine2.setVisibility(View.GONE);
        mMiddleBtn.setVisibility(View.GONE);
    }

    /**
     * 设置只有两个按钮,此时隐藏左侧按钮和分割线,并更换右侧按钮的整体点击背景,该按钮的点击事件通过右侧按钮的click方法实现
     */
    public void setOnlyTwoButton() {
        mLine2.setVisibility(View.GONE);
        mMiddleBtn.setVisibility(View.GONE);
    }


    /**
     * 设置内容字符串
     *
     * @param text
     */
    public void setContentText(String text) {
        alertTv.setText(text);
        mLeftBtn.setText(mDefaultLeftBtnText);
        mRightBtn.setText(mDefaultRightBtnText);
    }

    public void setBtnListener(OnBtnClickListener clickListener) {
        this.clickListener = clickListener;
    }

    /**
     * 关闭当前的特别提示框
     */
    public void close() {
        if (dialog.isShowing()) {
            dialog.dismiss();
        }
    }

    /**
     * 显示当前的特别提示框
     */
    public void show() {
        if (!dialog.isShowing()) {
            dialog.show();
        }
    }

    /**
     * 当前对话框的显示状态
     *
     * @return true表显示，false表隐藏
     */
    public boolean isShowing() {
        return dialog.isShowing();
    }

    /**
     * 获取当前的提示内容文本
     *
     * @return
     */
    public String getContentText() {
        return alertTv.getText() == null ? "" : alertTv.getText().toString();
    }

    /**
     * @author zhujc
     * @ClassName: OnBtnClickListener
     * @Description: 按钮点击响应类
     * @date 2015-6-28 下午6:09:15
     */
    public static class OnBtnClickListener implements OnCancelListener {
        // dialog:当前对话框；view:对话框加载的xml视图
        public void leftClick(Dialog dialog, View view) {

        }

        public void rigntClick(Dialog dialog, View view) {

        }

        public void onCancel(DialogInterface dialog) {

        }

        public void middleClick(DialogInterface dialog, View view) {

        }

    }

    OnClickListener mClickLintener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            // 左按钮点击事件
            if (v == mLeftBtn) {
                clickListener.leftClick(dialog, view);
            }
            // 右按钮点击事件
            if (v == mRightBtn) {
                clickListener.rigntClick(dialog, view);
            }
            if (v == mMiddleBtn) {
                clickListener.middleClick(dialog, view);
            }

        }
    };
}
